#include <stdio.h>
#include <string.h>
#include "msg.h"
#include <stdlib.h>

int main(void)
{

    Msg msg = msgCreate("topic-1", "Payload-1", 0, 20, 10);
    Byte* mb = msgToBytes(msg);
    // for (int i = 0; i < msgLength(msg); i++)
    // {
    //     printf("version[%d]: %d\n", i, mb[i]);
    // }

    Msg newMsg = msgBytesToMsg(mb);
    
    printf("newMsg.version: %d\n", newMsg.header.version);
    printf("newMsg.type: %d\n", newMsg.header.type);
    printf("newMsg.bodyLen: %d\n", newMsg.header.bodyLen);
    printf("newMsg.expireAfterNow: %d\n", newMsg.header.expireAfterNow);
    printf("newMsg.clientId: %d\n", newMsg.header.clientId);
    printf("newMsg.topicLen: %d\n", newMsg.body.topicLen);
    printf("newMsg.payloadLen: %d\n", newMsg.body.payloadLen);
    printf("newMsg.topic: %s\n", newMsg.body.topic);
    printf("newMsg.payload: %s\n", newMsg.body.payload);
    printf("newMsg.payload.Len: %d \n", strlen(newMsg.body.payload));

    printf("=========================================\n");

    MsgHeader header = msgBytesToMsgHeader(mb);
    int headerLen = msgHeaderLen();
    Byte* bodyBytes = bytesCopy(mb, headerLen, headerLen + header.bodyLen);
    newMsg = msgBodyBytesToMsg(bodyBytes, header);

    printf("newMsg.version: %d\n", newMsg.header.version);
    printf("newMsg.type: %d\n", newMsg.header.type);
    printf("newMsg.bodyLen: %d\n", newMsg.header.bodyLen);
    printf("newMsg.expireAfterNow: %d\n", newMsg.header.expireAfterNow);
    printf("newMsg.clientId: %d\n", newMsg.header.clientId);
    printf("newMsg.topicLen: %d\n", newMsg.body.topicLen);
    printf("newMsg.payloadLen: %d\n", newMsg.body.payloadLen);
    printf("newMsg.topic: %s\n", newMsg.body.topic);
    printf("newMsg.payload: %s\n", newMsg.body.payload);
    printf("newMsg.payload.Len: %d \n", strlen(newMsg.body.payload));

    free(mb);
    free(bodyBytes);
    free(newMsg.body.topic);
    free(newMsg.body.payload);

    return 0;
}